package reflect.annotations;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface AutoRunMethod {
    /*
        为注解添加参数：
        格式：
        类型 参数名() [default 默认值]

        例如：
        int value();
        当这样定义后，当前注解就支持传入一个int行的参数

        外面在使用注解时可以传参：
        @AutoRunMethod(11) 此时value参数的值为11

        在定义参数的同时可以为该参数指定默认值：
        int value() default 1;
        如果参数指定了默认值，那么在使用该注解是就不强制要求必须传参了，此时如果不传参则当前参数使用默认值
        @AutoRunMethod(11) 此时value参数的值为11
        @AutoRunMethod     此时value参数的值使用默认值1

        注：
        如果注解仅定义了一个参数时，参数名尽量选取为"value"。如果指定为别的名字，那么在使用注解传参时会麻烦。
        结合多个参数说明传参语法:
        @注解名(参数1=对应值,参数2=对应值)  这里参数的顺序可以与注解中定义参数的顺序不一致
        例如:
        在AutoRunMethod注解中定义了两个参数:
        int age();
        String name();

        在使用注解时，传参如下:
        @AutoRunMethod(age=11,name="张三")
        @AutoRunMethod(name="李四",age=22)

        对于只有一个参数时:
        如果注解仅定义了一个参数时，参数名如果不叫"value"，那么传参时:参数名=参数值
        例如，注解定义参数:
        int num() default 1;
        使用时传参:
        @AutoRunMethod(num=22)

        如果只有一个参数，且参数名为"value"，那么传参时:
        @AutoRunMethod(22)   可以省去参数名

        注意:上述省略参数名的情况仅限于注解定义了一个参数时，如果包含多个参数时，在传参时每个参数名都不可以忽略
        例如:
        int value() default 1;
        String name();
        在使用注解时:
        @AutoRunMethod(value=22,name="XXXX")  可以的
        @AutoRunMethod(name="XXXX",value=22)  可以的
        @AutoRunMethod(22,name="XXXX")        不可以，此时value的参数名不可以忽略！！！

     */
    int value() default 1;

//    int age() default 22;
//    String name();
}
